home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / source / PalPlasma.s < prev    next >
Text File  |  1994-07-09  |  9KB  |  571 lines

  1. ; Just a quick modification of some old PMC code.
  2.  
  3.     Opt    c-
  4.     Section    "Base Code",Code_c
  5.  
  6. PlasmaColour    = $c0000
  7. CopperList0    = $c2000
  8. CopperList1    = $d0000
  9. Lines    = 256
  10.  
  11.     IncDir    Df1:
  12.  
  13. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  14.     Bsr    KillSys      
  15.     
  16.     Lea    CopperList0,a0 
  17.     Lea    HardWare,a6      
  18.     Move.l    a0,Cop1Lc(a6)      
  19.     Move.w    #$83c0,DMACon(a6)
  20.  
  21.     Lea    CopperList0,a0
  22.     Lea    CopperList1,a1
  23.     Move.l    #$1000200,(a0)+    
  24.     Move.l    #$1000200,(a1)+    
  25.     Move.l    #$3001fffe,d0    
  26.     Move.w    #Lines-1,d6
  27. SetColLoop1    Move.l    d0,(a0)+
  28.     Move.l    d0,(a1)+
  29.     Move.w    #44,d7
  30. SetColLoop2    Move.l    #$01800000,(a0)+
  31.     Move.l    #$01800000,(a1)+
  32.     Dbf    d7,SetColLoop2
  33.     Cmp.l    #$ffe1fffe,d0
  34.     Beq    Poo2
  35.     Add.l    #$1000000,d0    
  36.     Move.l    d0,d1
  37.     Swap    d1
  38.     Asr.w    #8,d1
  39.     Cmp.b    #$ff,d1
  40.     Bne    Poo
  41.     Move.l    #$ffe1fffe,d0
  42.     Bra    Poo
  43.     
  44. Poo2    Move.l    #$0001fffe,d0
  45.  
  46. Poo    Dbf    d6,SetColLoop1    
  47.     Move.l    #$fffffffe,(a0)+
  48.     Move.l    #$fffffffe,(a1)+
  49.  
  50.     Bsr    DoRGBSine
  51.  
  52. Loop    Bsr    VBL
  53.     Bsr    DoubleBuffer
  54.     Bsr    DoWobble
  55.     Bsr    DoPlasma
  56.     Btst    #6,$Bfe001    
  57.     Bne    Loop      
  58.         
  59.     Bsr    ReturnSys      
  60.     Movem.l    (sp)+,d0-d7/a0-a6 
  61.     Moveq    #0,d0      
  62.     Rts
  63.  
  64. DoubleBuffer    Lea    CopperPt(pc),a0
  65.     Move.l    0(a0),d0
  66.     Move.l    4(a0),d1
  67.     Move.l    d0,4(a0)
  68.     Move.l    d1,0(a0)
  69.     Move.l    d0,$Dff080
  70.     Rts
  71.  
  72. DoRGBSine    Move.w    #0,d2
  73.     Lea    PlasmaColour,a0
  74. RGBSineLoop    Lea    RedSine(pc),a2
  75.     Bsr    SineWave
  76.     Move.w    d4,0(a0)
  77.     Lea    GreenSine(pc),a2
  78.     Bsr    SineWave
  79.     Asl.w    #4,d4
  80.     Move.w    d4,2(a0)
  81.     Lea    BlueSine(pc),a2
  82.     Bsr    SineWave
  83.     Asl.w    #8,d4
  84.     Move.w    d4,4(a0)    
  85.     Move.w    #0,6(a0)
  86.     Addq    #8,a0
  87.     Add.w    #1,d2
  88.     Cmp.w    #810,d2
  89.     Bne    RGBSineLoop
  90.     Rts
  91.  
  92. SineWave    Movem.l    d0-d3/a0-a1,-(sp)
  93.     Lea    SineData(pc),a0
  94.     Move.l    00(a2),d0
  95.     Move.l    04(a2),d1
  96.     Move.l    08(a2),d2
  97.     Move.l    12(a2),d3
  98.     And.l    #$7fe,d0
  99.     And.l    #$7fe,d1
  100.     And.l    #$1fe,d2
  101.     And.l    #$1fe,d3
  102.     Add.l    d2,d0
  103.     Add.l    d3,d1
  104.     Move.l    d0,0(a2)
  105.     Move.l    d1,4(a2)
  106.     Move.w    (a0,d0),d4
  107.     Add.w    (a0,d1),d4
  108.     Add.l    #512,d4
  109.     Asr.w    #6,d4
  110.     And.w    #$f,d4
  111.     Movem.l    (sp)+,d0-d3/a0-a1
  112.     Rts
  113.  
  114. DoWobble    Move.l    WobbleSine0(pc),d0
  115.     Move.l    WobbleSine1(pc),d1
  116.     Move.l    WobbleSine2(pc),d2
  117.     Move.l    WobbleSine3(pc),d3
  118.     Lea    PlasmaSine(pc),a4
  119.     Lea    PlasmaSine+$100(pc),a5
  120.     Move.l    a4,d4
  121.     Move.l    a5,d5
  122.     Move.l    #$100,d7
  123.     Lea    WobbleSine0Pt(pc),a1
  124.     Lea    WobbleSine1Pt(pc),a2
  125.     Add.l    d0,(a1)
  126.     Cmp.l    (a1),d5
  127.     Bhi    FindSine1
  128.     Sub.l    d7,(a1)
  129.     Bra    FoundSine1
  130.  
  131. FindSine1    Cmp.l    (a1),d4
  132.     Bls    FoundSine1
  133.     Add.l    d7,(a1)
  134. FoundSine1    Add.l    d1,(a2)
  135.     Cmp.l    (a2),d5
  136.     Bhi    FindSine2
  137.     Sub.l    d7,(a2)
  138.     Bra    FoundSine2
  139.  
  140. FindSine2    Cmp.l    (a2),d4
  141.     Bls    FoundSine2
  142.     Add.l    d7,(a2)
  143. FoundSine2    Move.l    CopperPt(pc),a0
  144.     Add.l    #$5,a0
  145.     Move.l    WobbleSine0Pt(pc),a1
  146.     Move.l    WobbleSine1Pt(pc),a2
  147.     Lea    $100,a3
  148.     Move.w    #Lines-1,d0
  149.     Move.l    #$b8,d1
  150.     Moveq.l    #1,d4
  151.     Moveq.l    #0,d6
  152.     Moveq.l    #$57,d7
  153. DoWobbleLoop    Add.l    d2,a1
  154.     Cmp.l    d5,a1
  155.     Bcs    EndWobTab
  156.     Sub.l    a3,a1
  157. EndWobTab    Add.l    d3,a2
  158.     Cmp.l    d5,a2
  159.     Bcs    SetWobble
  160.     Sub.l    a3,a2
  161. SetWobble    Move.b    (a1),d6
  162.     Add.b    (a2),d6
  163.     Lsr.b    d4,d6
  164.     Lsl.b    d4,d6
  165.     Add.b    d7,d6
  166.     Move.b    d6,(a0)
  167.     Add.l    d1,a0
  168.     Dbra    d0,DoWobbleLoop
  169.     Rts    
  170.  
  171. DoPlasma    Move.l    PlasmaSine0(pc),d0
  172.     Move.l    PlasmaSine1(pc),d4
  173.     Move.l    PlasmaSine2(pc),d1
  174.     Move.l    PlasmaSine3(pc),d5
  175.     Move.l    PlasmaSine4(pc),d2
  176.     Move.l    PlasmaSine5(pc),d6
  177.     Move.l    PlasmaSine6(pc),d3
  178.     Move.l    PlasmaSine7(pc),d7
  179.     Lea    PlasmaSine0Pt(pc),a0
  180.     Lea    PlasmaSine1Pt(pc),a1
  181.     Lea    PlasmaSine2Pt(pc),a2
  182.     Lea    PlasmaSine3Pt(pc),a3
  183.     Lea    PlasmaColour,a4
  184.     Lsl.l    #1,d0
  185.     Lsl.l    #1,d1
  186.     Lsl.l    #1,d2
  187.     Lsl.l    #1,d3
  188.     Lsl.l    #1,d4
  189.     Lsl.l    #1,d5
  190.     Lsl.l    #1,d6
  191.     Lsl.l    #1,d7
  192.     Add.l    d0,(a0)
  193.     Cmp.l    #PlasmaSine+$2040,(a0)
  194.     Bcs    GetRedSine
  195.     Sub.l    #$1f40,(a0)
  196.     Bra.s    GotRedSine
  197.  
  198. GetRedSine    Cmp.l    #PlasmaSine+$100,(a0)
  199.     Bcc    GotRedSine
  200.     Add.l    #$1f40,(a0)
  201. GotRedSine    Add.l    d1,(a1)
  202.     Cmp.l    #PlasmaSine+$2040,(a1)
  203.     Bcs    GetGreenSine
  204.     Sub.l    #$1f40,(a1)
  205.     Bra.s    GotGreenSine
  206.  
  207. GetGreenSine    Cmp.l    #PlasmaSine+$100,(a1)
  208.     Bcc    GotGreenSine
  209.     Add.l    #$1f40,(a1)
  210. GotGreenSine    Add.l    d2,(a2)
  211.     Cmp.l    #PlasmaSine+$2040,(a2)
  212.     Bcs    GetBlueSine
  213.     Sub.l    #$1f40,(a2)
  214.     Bra.s    GotBlueSine
  215.  
  216. GetBlueSine    Cmp.l    #PlasmaSine+$100,(a2)
  217.     Bcc    GotBlueSine
  218.     Add.l    #$1f40,(a2)
  219. GotBlueSine    Add.l    d3,(a3)
  220.     Cmp.l    #PlasmaSine+$2040,(a3)
  221.     Bcs    SinesFound
  222.     Sub.l    #$1f40,(a3)
  223.     Bra.s    SetNewSine
  224.  
  225. SinesFound    Cmp.l    #PlasmaSine+$100,(a3)
  226.     Bcc    SetNewSine
  227.     Add.l    #$1f40,(a3)
  228. SetNewSine    Move.l    (a0),a0
  229.     Move.l    (a1),a1
  230.     Move.l    (a2),a2
  231.     Move.l    (a3),a3
  232.     Move.l    CopperPt(pc),d2
  233.     Add.l    #$a,d2
  234.     Move.l    a4,d3
  235.     Bsr    WaitBlitter
  236.     Move.w    #6,$Dff064
  237.     Move.w    #6,$Dff062
  238.     Move.w    #6,$Dff060
  239.     Move.w    #$b6,$Dff066
  240.     Move.l    #-1,$Dff044
  241.     Move.w    #$ffe,$Dff040
  242.     Move.w    #0,$Dff042
  243.     Move.l    a6,-(sp)
  244.     Lea    XCount(pc),a6
  245.     Move.w    #0,(a6)
  246.     Move.l    (sp)+,a6
  247. CheckSine1    Add.l    d4,a0
  248.     Cmp.l    #PlasmaSine+$2040,a0
  249.     Bcs    CheckSine2
  250.     Sub.l    #$1f40,a0
  251. CheckSine2    Add.l    d5,a1
  252.     Cmp.l    #PlasmaSine+$2040,a1
  253.     Bcs    CheckSine3
  254.     Sub.l    #$1f40,a1
  255. CheckSine3    Add.l    d6,a2
  256.     Cmp.l    #PlasmaSine+$2040,a2
  257.     Bcs    CheckSine4
  258.     Sub.l    #$1f40,a2
  259. CheckSine4    Add.l    d7,a3
  260.     Cmp.l    #PlasmaSine+$2040,a3
  261.     Bcs    SetRGBBlit
  262.     Sub.l    #$1f40,a3
  263. SetRGBBlit    Moveq.l    #0,d0
  264.     Move.w    (a0),d0
  265.     Move.w    (a1),d1
  266.     Add.w    d1,d0
  267.     Lsr.w    #1,d0
  268.     Lsl.w    #3,d0
  269.     Move.l    d3,a4
  270.     Add.l    #2,d3
  271.     Add.l    d0,a4
  272.     Move.w    (a1),d0
  273.     Move.w    (a2),d1
  274.     Add.w    d1,d0
  275.     Lsr.w    #1,d0
  276.     Lsl.w    #3,d0
  277.     Move.l    d3,a5
  278.     Add.l    #2,d3
  279.     Add.l    d0,a5
  280.     Move.w    (a2),d0
  281.     Move.w    (a3),d1
  282.     Add.w    d1,d0
  283.     Lsr.w    #1,d0
  284.     Lsl.w    #3,d0
  285.     Move.l    d3,a6
  286.     Add.l    #2,d3
  287.     Add.l    d0,a6
  288.     Bsr    WaitBlitter
  289.     Move.l    a4,$Dff050
  290.     Move.l    a5,$Dff04c
  291.     Move.l    a6,$Dff048
  292.     Move.l    d2,$Dff054
  293.     Move.w    #(Lines*64)+1,$Dff058
  294.     Sub.l    #6,d3
  295.     Add.l    #4,d2
  296.     Move.l    a6,-(sp)
  297.     Lea    XCount(pc),a6
  298.     Add.w    #1,(a6)
  299.     Move.w    (a6),d0
  300.     Move.l    (sp)+,a6
  301.     Cmp.w    #$10,d0
  302.     Bne    CheckSine1
  303.     Bsr    WaitBlitter
  304.     Rts    
  305.     
  306. WaitBlitter    Btst    #$6,$Dff002
  307.     Bne    WaitBlitter
  308.     Rts
  309.  
  310. VBL    Move.l    $Dff004,d0
  311.     And.l    #$1ff00,d0
  312.     Cmp.l    #$13000,d0
  313.     Bne    VBL
  314.     Rts
  315.  
  316. KillSys    Bsr.s    SysWait    
  317.  
  318.     Move.l    $4,a6    
  319.     Lea    GFXName(pc),a1    
  320.     Moveq    #0,d0    
  321.     Jsr    -552(a6)    
  322.         
  323.     Lea    OldCop1(pc),a5
  324.     Move.l    $26(a0),$0(a5)    
  325.     Move.l    $32(a0),$4(a5)    
  326.     
  327.     Lea    HardWare,a6
  328.     Move.w    IntEnaR(a6),d0    
  329.     Move.w    DMAConR(a6),d1  
  330.     Or.w    #$8000,d0    
  331.     And.w    #$03ff,d1    
  332.     Or.w    #$8000,d1    
  333.     Move.w    d0,$8(a5)    
  334.     Move.w    d1,$a(a5)    
  335.     
  336.     Move.w    #$7fff,IntEna(a6) 
  337.     Move.w    #$7fff,DMACon(a6) 
  338.     Rts
  339.  
  340. SysWait    Move.w    #15,d7    
  341. SysWaitLoop    Move.l    #$05000,d1    
  342.     Bsr.s    WaitVBL    
  343.     Bsr.s    DoWaitVBL    
  344.     Dbf    d7,SysWaitLoop    
  345.     Rts
  346.  
  347. DoWaitVBL    Move.l    #$03000,d1    
  348. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  349.     Lea    HardWare,a6    
  350. WaitVBLLoop    Move.l    VPosR(a6),d0    
  351.     And.l    #$1ff00,d0    
  352.     Cmp.l    d1,d0    
  353.     Bne.s    WaitVBLLoop    
  354.     Movem.l    (sp)+,d0-d1/a6    
  355.     Rts        
  356.  
  357. ReturnSys    Lea    HardWare,a6    
  358.     Move.w    OldIntEna(pc),IntEna(a6)
  359.     Move.w    OldDMACon(pc),DMACon(a6)
  360.     Move.l    OldCop1(pc),Cop1lc(a6)
  361.     Move.l    OldCop2(pc),Cop2lc(a6)
  362.     Rts
  363.  
  364. GFXName    Dc.b    "graphics.library",0
  365.     Even
  366. OldCop1    Dc.l    0    
  367. OldCop2    Dc.l    0    
  368. OldIntEna    Dc.w    0    
  369. OldDmaCon    Dc.w    0    
  370. Screen    Dc.l    $c0000    
  371.  
  372. XCount    Dc.w    0
  373.  
  374. RedSine    Dc.l    8
  375.     Dc.l    2
  376.     Dc.l    12
  377.     Dc.l    6
  378.  
  379. GreenSine    Dc.l    4
  380.     Dc.l    4
  381.     Dc.l    8
  382.     Dc.l    14
  383.  
  384. BlueSine    Dc.l    2
  385.     Dc.l    2
  386.     Dc.l    14
  387.     Dc.l    6
  388.  
  389. WobbleSine0    Dc.l    1
  390. WobbleSine1    Dc.l    3
  391. WobbleSine2    Dc.l    2
  392. WobbleSine3    Dc.l    1
  393.  
  394. WobbleSine0Pt    Dc.l    PlasmaSine
  395. WobbleSine1Pt    Dc.l    PlasmaSine
  396.  
  397. CopperPt    Dc.l    CopperList0
  398. CopperPt1    Dc.l    CopperList1
  399.  
  400. PlasmaSine0    Dc.l    34
  401. PlasmaSine1    Dc.l    22
  402. PlasmaSine2    Dc.l    16
  403. PlasmaSine3    Dc.l    48
  404. PlasmaSine4    Dc.l    12
  405. PlasmaSine5    Dc.l    24
  406. PlasmaSine6    Dc.l    32
  407. PlasmaSine7    Dc.l    14
  408.  
  409. PlasmaSine0Pt    Dc.l    PlasmaSine+$100
  410. PlasmaSine1Pt    Dc.l    PlasmaSine+$100
  411. PlasmaSine2Pt    Dc.l    PlasmaSine+$100
  412. PlasmaSine3Pt    Dc.l    PlasmaSine+$100
  413.  
  414. TabVar1    Dc.l    0
  415. TabVar2    Dc.l    0
  416. TabVar3    Dc.l    0
  417. TabVar4    Dc.l    0
  418. TabVar5    Dc.l    0
  419. TabVar6    Dc.l    0
  420. TabVar7    Dc.l    0
  421. TabVar8    Dc.l    0
  422.  
  423. Cmv    Macro
  424.     Dc.w    \2,\1
  425.     EndM
  426.     
  427. Cwt    Macro
  428.     Dc.w    (\1*$100)+$01,$fffe
  429.     EndM    
  430.  
  431. Pal    Macro
  432.     Dc.w    $ffe1,$fffe
  433.     EndM    
  434.  
  435. EndCop    Macro
  436.     Dc.w    $ffff,$fffe
  437.     EndM    
  438.  
  439. PlasmaSine    Incbin    df0:SysData/PMC.Sine1
  440. SineData    Incbin    df0:SysData/Sine1024Bs.Dat
  441.     Incbin    df0:SysData/Sine1024Bs.Dat
  442.  
  443.  
  444.  
  445. ****Custom Chip Registers****
  446.  
  447. Hardware    = $Dff000
  448.  
  449. ;Control Registers
  450.  
  451. Dmaconr    = $002
  452. Vposr    = $004
  453. Vhposr    = $006
  454. Joy0dat    = $00A
  455. Joy1dat    = $00C
  456. Clxdat    = $00E
  457. Intenar    = $01C
  458. Intereqr    = $01E
  459. Copcon    = $02E
  460.  
  461. ;Blitter Registers
  462.  
  463. Bltcon0    = $040
  464. Bltcon1    = $042
  465. Bltafwm    = $044
  466. Bltalwm    = $046
  467. Bltcpth    = $048
  468. Bltcptl    = $04A
  469. Bltbpth    = $04C
  470. Bltbptl    = $04E
  471. Bltapth    = $050
  472. Bltaptl    = $052
  473. Bltdpth    = $054
  474. Bltdptl    = $056
  475. Bltsize    = $058
  476. Bltcmod    = $060
  477. Bltbmod    = $062
  478. Bltamod    = $064
  479. Bltdmod    = $066
  480. Bltcdat    = $070
  481. Bltbdat    = $072
  482. Bltadat    = $074
  483.  
  484. ;Copper Registers
  485.  
  486. Cop1lc    = $080
  487. Cop1lch    = $080
  488. Cop1lcl    = $082
  489. Cop2lc    = $084
  490. Cop2lch    = $084
  491. Cop2lcl    = $086
  492. Copjmp1    = $088
  493. Copjmp2    = $08A
  494. Diwstrt    = $08E
  495. Diwstop    = $090
  496. Ddfstrt    = $092
  497. Ddfstop    = $094
  498. Dmacon    = $096
  499. Clxcon    = $098
  500. Intena    = $09A
  501. Intreq    = $09C
  502.  
  503. ;BitPlane Registers 
  504.  
  505. BplCon0    = $100
  506. BplCon1    = $102
  507. BplCon2    = $104
  508. BplMod1    = $108
  509. BplMod2    = $10a
  510.  
  511. BplPt0h    = $0e0
  512. BplPt0l    = $0e2
  513. BplPt1h    = $0e4
  514. BplPt1l    = $0e6
  515. BplPt2h    = $0e8
  516. BplPt2l    = $0ea
  517. BplPt3h    = $0ec
  518. BplPt3l    = $0ee
  519. BplPt4h    = $0f0
  520. BplPt4l    = $0f2
  521. BplPt5h    = $0f4
  522. BplPt5l    = $0f6
  523.  
  524. ;Colour Registers
  525.  
  526. Color00    = $180
  527. Color01    = $182
  528. Color02    = $184
  529. Color03    = $186
  530. Color04    = $188
  531. Color05    = $18a
  532. Color06    = $18c
  533. Color07    = $18e
  534. Color08    = $190
  535. Color09    = $192
  536. Color10    = $194
  537. Color11    = $196
  538. Color12    = $198
  539. Color13     = $19a
  540. Color14     = $19c
  541. Color15     = $19e
  542. Color16     = $1a0
  543. Color17     = $1a2
  544. Color18     = $1a4
  545. Color19     = $1a6
  546. Color20     = $1a8
  547. Color21     = $1aa
  548. Color22     = $1ac
  549. Color23     = $1ae
  550. Color24     = $1b0
  551. Color25     = $1b2
  552. Color26     = $1b4
  553. Color27     = $1b6
  554. Color28     = $1b8
  555. Color29     = $1ba
  556. Color30     = $1bc
  557. Color31     = $1be
  558.  
  559. EcsNop    = $1fe
  560.  
  561.  
  562.  
  563.  
  564.  
  565.  
  566.  
  567.  
  568.  
  569.  
  570.  
  571.